package top.huhuiyu.springboot.study.tasks;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import top.huhuiyu.springboot.study.mapper.UtilMapper;
import top.huhuiyu.springboot.study.service.DailyWordService;
import top.huhuiyu.springboot.study.service.JokeService;

/**
 * @author 胡辉煜
 */
// @EnableScheduling表示开启定时任务
@EnableScheduling
@Component
@Slf4j
@RequiredArgsConstructor
public class AutoTask {
  private final UtilMapper utilMapper;
  private final JokeService jokeService;
  private final DailyWordService dailyWordService;

  // @Scheduled是定制计划任务的注解，可以准确的控制任务执行的时间
  // fixedDelay表示间隔多少毫秒执行一次
  // initialDelay表示等待多少毫秒才执行第一次
  // cron是定制cron表达式，可以精确到秒，分，时，日，月，周来定时执行
  // 例如 0/5 * * * * ? 表示每5秒执行一次
  // 或者 0 0 0/1 * * ? 表示每1小时执行一次
  // 或者 0 30 4 1,15 * ? 表示每月1号或者15号4点30执行一次
  @Scheduled(fixedDelay = 5 * 60 * 1000, initialDelay = 60 * 1000)
  public void display() {
//    log.debug("延迟自动显示数据库当前时间：{}", utilMapper.queryNow());
  }

  // 秒数到7或者37的时候自动执行
  @Scheduled(cron = "7,37 * * * * ?")
  public void displayTime() {
//    log.debug("定时自动显示数据库当前时间：{}", utilMapper.queryNow());
  }

  @Scheduled(cron = "0 0/2 * * * ?")
  public void joke() {
//    log.debug("定时获取的笑话数量：{}", jokeService.saveJoke());
  }

  @Scheduled(cron = "31 0/2 * * * ?")
  public void dailyword() {
//    log.debug("定时获取的每日一句数量：{}", dailyWordService.saveDailyWord());
  }

}
